import pandas as pd
import os
from pathlib import Path
import re

def extract_indicator_name_from_filename(filename):
    """从文件名中提取指标名称"""
    # 移除'-全行业.xlsx'后缀
    name = filename.replace('-全行业.xlsx', '')
    return name

def get_unit_from_filename(filename):
    """根据文件名获取单位信息"""
    # 定义指标名称到单位的映射
    unit_mapping = {
        '存货周转率': '次',
        '带息负债比率': '%',
        '国有资本回报率': '%',
        '技术投入比率': '%',
        '经济增加值率': '%',
        '净资产收益率': '%',
        '利润总额增长率': '%',
        '两金占流动资产比重': '%',
        '流动资产周转率': '次',
        '全员劳动生产率': '万元/人',
        '速动比率': '',
        '现金流动负债比率': '%',
        '销售营业利润率': '%',
        '研发经费投入强度': '%',
        '已获利息倍数': '倍',
        '应收账款周转率': '次',
        '盈余现金保障倍数': '倍',
        '营业现金比率': '%',
        '营业总收入增长率': '%',
        '资本保值增值率': '%',
        '资产负债率': '%',
        '总资产收益率': '%',
        '总资产周转率': '次',
        'EBITDA率': '%',
        '百元收入支付的成本费用': '元'
    }
    
    indicator_name = extract_indicator_name_from_filename(filename)
    return unit_mapping.get(indicator_name, '')

def process_excel_file(file_path):
    """处理单个Excel文件"""
    try:
        # 读取数据表sheet
        df_data = pd.read_excel(file_path, sheet_name='数据表')
        
        # 获取指标名称
        filename = os.path.basename(file_path)
        indicator_name = extract_indicator_name_from_filename(filename)
        
        # 获取单位
        unit = get_unit_from_filename(filename)
        if unit:
            full_indicator_name = f"{indicator_name}({unit})"
        else:
            full_indicator_name = indicator_name
        
        print(f"处理文件: {filename}")
        print(f"数据表形状: {df_data.shape}")
        
        # 第一行是表头，包含各行业的指标信息
        # 第一列是日期
        header_row = df_data.iloc[0]  # 表头行
        date_column_name = df_data.columns[0]  # 日期列名
        
        result_data = []
        
        # 分析表头，找到不同行业的不同评级
        # 按行业分组处理
        industries = set()
        for col in header_row:
            if isinstance(col, str) and ':' in col:
                parts = col.split(':')
                if len(parts) >= 2:
                    industry = parts[1]
                    industries.add(industry)
        
        # 对每个行业单独处理
        for industry in industries:
            # 找到该行业的各个评级列
            industry_cols = {}
            for i, col_header in enumerate(header_row):
                if isinstance(col_header, str) and industry in col_header:
                    if '优秀值' in col_header:
                        industry_cols['优秀值'] = i
                    elif '良好值' in col_header:
                        industry_cols['良好值'] = i
                    elif '平均值' in col_header:
                        industry_cols['平均值'] = i
                    elif '较低值' in col_header:
                        industry_cols['较低值'] = i
                    elif '较差值' in col_header:
                        industry_cols['较差值'] = i
            
            # 如果该行业有完整的数据，则处理
            if len(industry_cols) >= 3:  # 至少要有3个评级
                # 遍历每一年的数据（从第2行开始，跳过表头）
                for row_idx in range(1, len(df_data)):
                    year = df_data.iloc[row_idx, 0]  # 第一列是年份
                    if pd.isna(year) or year == '':
                        continue
                    
                    # 提取各等级的值
                    row_data = {
                        '指标名称': full_indicator_name,
                        '年份': year,
                        '优秀值': df_data.iloc[row_idx, industry_cols.get('优秀值', 0)] if '优秀值' in industry_cols else '',
                        '良好值': df_data.iloc[row_idx, industry_cols.get('良好值', 0)] if '良好值' in industry_cols else '',
                        '平均值': df_data.iloc[row_idx, industry_cols.get('平均值', 0)] if '平均值' in industry_cols else '',
                        '较低值': df_data.iloc[row_idx, industry_cols.get('较低值', 0)] if '较低值' in industry_cols else '',
                        '较差值': df_data.iloc[row_idx, industry_cols.get('较差值', 0)] if '较差值' in industry_cols else ''
                    }
                    
                    # 添加行业信息到指标名称
                    row_data['指标名称'] = f"{full_indicator_name}-{industry}"
                    result_data.append(row_data)
        
        print(f"从 {filename} 提取了 {len(result_data)} 条记录")
        return result_data
        
    except Exception as e:
        print(f"处理文件 {file_path} 时出错: {e}")
        import traceback
        traceback.print_exc()
        return []

def main():
    # 定义输入目录
    input_dir = Path("行业均值/全行业财务绩效平均指标标准值")
    
    if not input_dir.exists():
        print(f"目录不存在: {input_dir}")
        return
    
    all_data = []
    
    # 遍历所有Excel文件
    for excel_file in input_dir.glob("*.xlsx"):
        if excel_file.name.startswith('~'):  # 跳过临时文件
            continue
            
        print(f"\n正在处理: {excel_file.name}")
        file_data = process_excel_file(excel_file)
        all_data.extend(file_data)
    
    # 创建最终的DataFrame
    if all_data:
        final_df = pd.DataFrame(all_data)
        
        # 保存为Excel文件
        output_file = "整理后的行业指标数据.xlsx"
        final_df.to_excel(output_file, index=False, engine='openpyxl')
        
        print(f"\n数据处理完成！")
        print(f"共处理 {len(final_df)} 条数据记录")
        print(f"结果已保存到: {output_file}")
        
        # 显示前几行作为预览
        print("\n数据预览:")
        print(final_df.head(10))
    else:
        print("没有处理到任何数据")

if __name__ == "__main__":
    main()
